/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package CapaPersistencia;


import CapaLogica.ComunicaPago;
import CapaLogica.GestionResort;

import CapaDatos.Cliente;
import CapaDatos.Habitacion;
import CapaDatos.Reserva;
import java.util.ArrayList;

/**
 * Clase controladora para el dominio de Cliente
 *
 */
public class ControladorReserva {

    /** atributo para el manejo de la persistencia de cliente*/
    private IDAOReserva manejadorPersistencia = new DAOReservaXML();
    private ComunicaPago pago = new ComunicaPago();

    /**
     * firma para registrar un nuevo cliente en el sistema
     * @param cedulaCliente cedula del cliente
     * @param nombre nombre del cliente
     * @param apellido apellido del cliente
     * @param Fecha fecha de nacimiento del cliente
     * @return valor booleano con la condicion de exito
     */
    public boolean nuevaReserva(String cedulaCliente, String idHab, String fechaInicio, String fechaFin, int idReserva, double monto)
         {
        boolean resultado = false;
        Reserva reservaNueva = new Reserva();
        if(GestionResort.getLosClientes().BuscarClientePorCedula(cedulaCliente))
        {
            Cliente cliente = GestionResort.getLosClientes().BuscarCliente(cedulaCliente);
            reservaNueva.setElCliente(cliente);
            reservaNueva.setFechaInicio(fechaInicio);
            reservaNueva.setFechaFin(fechaFin);
            reservaNueva.setID(idReserva);
            monto = pago.calcularMonto(cliente,fechaInicio,fechaFin);
            reservaNueva.setMonto(monto);
            if(GestionResort.getLasHabitaciones().BuscarHabitacionPorId(idHab))
            {
                Habitacion laHabitacion = GestionResort.getLasHabitaciones().BuscarHabitacion(idHab);
                    if(laHabitacion.getEdoActual().equals("Habilitada"))
                        {
                            reservaNueva.setLaHabitacion(laHabitacion);
                            resultado = manejadorPersistencia.agregarReserva(reservaNueva);
                            return resultado;
                         }
            }
        }
        return resultado;
    }

    /**
     *  firma para actualizar un cliente en el sistema
     * @param cedulaCliente cedula del cliente
     * @param nombre nombre del cliente
     * @param apellido apellido del cliente
     * @param Fecha fecha de nacimiento del cliente
     * @return valor booleano con la condicion de exito
     */
    public boolean actualizarReserva(String cedulaCliente, String idHab, String fechaInicio, String fechaFin, int idReserva, double monto)
            {
        boolean resultado = false;
        Reserva reservaAct = new Reserva();
        Cliente cliente = GestionResort.getLosClientes().BuscarCliente(cedulaCliente);
        reservaAct.setElCliente(cliente);
        reservaAct.setFechaInicio(fechaInicio);
        reservaAct.setFechaFin(fechaFin);
        reservaAct.setID(idReserva);
        reservaAct.setMonto(monto);
        Habitacion laHabitacion = GestionResort.getLasHabitaciones().BuscarHabitacion(idHab);
        reservaAct.setLaHabitacion(laHabitacion);
        resultado = manejadorPersistencia.actualizarReserva(reservaAct);
        return resultado;
    }

    /**
     * firma para eliminar un cliente del sistema
     * @param cedulaCliente cedula del cliente a eliminar
     * @return valor booleano con la condicion de exito
     */
    public boolean eliminarReserva(Integer id) {
        boolean resultado = false;
        Integer idEliminar = id;
        resultado = manejadorPersistencia.borrarReserva(idEliminar);
        return resultado;
    }

    /**
     * firma para buscar un cliente en el sistema
     * @param cedulaCliente cedula del cliente a buscar
     * @return objeto cliente con los datos
     */
    public Reserva buscarReserva(Integer idReserva) {
        Reserva resultado = new Reserva();
        Integer idBuscar = idReserva;
        resultado = manejadorPersistencia.buscarReserva(idBuscar);
        return resultado;
    }

    /**
     * Firma para obtener todos los clientes del sistema
     * @return ArrayList con todos los clientes del sistema
     */
    public ArrayList<Reserva> todasLasReservas() {
        return this.manejadorPersistencia.todasLasReservas();
    }
}